7. Conociendo a fondo tu sistema.


7.1. Usuarios y Grupos. Tipos de usuarios. Sudo.

Linux fue diseñado desde el principio como un sistema multiusuario (como contraposición a MS-DOS), es decir está concebido para ser utilizado por varios usuarios a la vez o simultáneamente. En Linux deberás habituarte a iniciar la sesión como un usuario “normal” o típico, no como administrador o root del sistema.

¿Por qué? Pues básicamente por razones de seguridad. Ya sea porque en el transcurso diario de una sesión en Linux puedas meter la pata y dejar inestable el sistema, o bien porque al navegar por Internet o ejecutar una aplicación en modo root, ésta, otra aplicación o un usuario no autorizado desde el exterior aproveche la ocasión para colarse en tu sistema con todos los privilegios y realizar acciones perniciosas o dañinas contra el sistema.


Y es que, si lo piensas, “he aquí la madre del cordero”, para navegar por Internet o ejecutar la mayoría de las aplicaciones del día a día no necesitas en absoluto ser un usuario administrador

Por lo tanto, en Linux existen muchos tipos de usuarios, sin embargo nos interesan básicamente dos: el usuario normal o común y el administrador. La idea es que para realizar tareas administrativas como, por ejemplo, instalar o desinstalar software precisas privilegios de administración. Existen dos modos de abordar el problema.

El primer modo sería cambiar de nuestro usuario común (el que llamamos joe) al usuario root (o administrador). La forma más sencilla es mediante la orden “su”, que son las siglas de swich user, es decir, cambiar de usuario. Cuando quieras cambiar a root, bastará con escribir en la consola (se accede desde K, Sistema, Konsole): su root.

Sin embargo en Ubuntu la cuenta de root está desactivada, para activarla escribe en la consola la siguiente orden: sudo passwd. Ahora te pide que introduzcas tres contraseñas:

  1. La primera es la del usuario con el que entras al sistema normalmente (joe).

  2. La segunda palabra de paso será la de root. La que tendrás que introducir cuando quieras cambiar a root con la orden su root.

  3. Finalmente la última será la confirmación de la segunda contraseña.

Ahora cambia de usuario con su root y puedes saber bien en el prompt o con la órden whoami (Who am I? o ¿Quién soy yo?) que usuario eres en todo momento.

Pero, ¿qué es el prompt? Sencillo, abre la consola desde K, Sistema, Konsole.


La segunda opción, quizás la mejor en términos de seguridad, es dar a nuestro usuario determinados privilegios administrativos durante un tiempo limitado, para que pueda realizar las tareas que precise para mantener el sistema.

Este es el modo de trabajar por defecto de la distribución Ubuntu y se implementa pidiendo la contraseña para los programas “administrativos” y anteponiendo sudo a cualquier orden que requiera tales permisos. Veamos un ejemplo, si queremos instalar nuevo software, utilizamos el Adept. Para abrirlo navegamos por K, Sistema, Administrador Adept. Nos va a pedir la contraseña porque la instalación de programas es una tarea administrativa que compromete la seguridad del sistema. Es una forma de decirnos: ¡Cuidado!, a partir de ahora puedes comprometer la seguridad y estabilidad del equipo.

Análogamente si quisiéramos hacer lo mismo desde la consola con apt-get install paqueteAInstalar (instala “paqueteAInstalar”), precisarías anteponer sudo y teclear por tanto: sudo apt.-get install paquete.

Los usuarios además se organizan en grupos para facilitar la gestión, así pues cada usuario tiene asignado un grupo y puede pertenecer a varios. Podemos otorgar determinados permisos por grupos de usuarios en vez de a usuarios individuales.

Resumiendo, en nuestro sistema existen dos cuentas: la del usuario normal o habitual y la del administrador. Sin embargo en Ubuntu, la cuenta de administrador está desactivada.

Podemos activarla por consola (sudo passwd) o de forma gráfica, por ejemplo en Gnome desde Sistema, Administración, Usuarios y grupos. Primero debes desbloquear dicha herramienta haciendo clic en Desbloquear.

Selecciona el usuario root (administrador) y haz clic en Propiedades. Ahora, escribimos la contraseña en la sección donde dice Establecer la contraseña a mano.

Si vas a estar durante cierto tiempo realizando operaciones de administración, lo más cómodo es cambiar de usuario con la orden “su nuevoUsuario” (switch user, “cambiar de usuario”). Por defecto, si no indicamos ningún usuario (escribiendo sólo “su”) cambiará a root (administrador).


Observa, en este momento tienes control absoluto del sistema y debes andarte con mucho más cuidado que cuando utilizas el usuario por defecto. Ahora si cometes un error puede ser irrecuperable.

Si quieres crear usuarios, puedes utilizar la herramienta gráfica anterior, haciendo clic en esta ocasión en Añadir usuario o en la consola escribiendo: sudo adduser nombreNuevoUsuario. En ambos casos tendrás que indicar además el nombre completo y algunos datos más.

Análogamente, para borrar usuarios tenemos la orden deluser: sudo deluser nombreNuevoUsuario o desde la interfaz gráfica seleccionando el usuario y haciendo clic en el botón Borrar.

Cambiando de usuario una y otra vez, puede sucederte que en un momento dado no sepas ni quién eres, para orientarte puedes mirar el prompt o ejecutar la orden whoami (Who am I? en inglés significa ¿quién soy yo?).

En la siguiente ilustración, te mostramos un ejemplo. Primero hemos ejecutado la orden whoami y el resultado es joe, es decir, informa que en el sistema ahora mismo somos joe. Seguidamente hemos ejecutado whoami --help, para mostrar la ayuda del comando.

Otras órdenes útiles son: chmod (permite controlar el nivel de acceso de los usuarios a un determinado fichero o directorio) y chown. Si queremos asignar la propiedad de un fichero o directorio a un usuario, utilizamos esta orden. Observa que todo fichero o directorio pertenece a alguien. La sintaxis sería chown miUsuario tuExArchivo y cambiaríamos la propiedad de tuExArchivo a miUsuario. Análogamente para directorios sería chown –R miUsuario tuExDirectorio. Los llamamos tuExArchivo y tuExDirectorio porque eran de un usuario X y ahora pertenecen a miUsuario.

Análogamente, podemos crear grupos con groupadd, eliminarlos con groupdel, o cambiar la propiedad de un fichero o directorio a un nuevo grupo con chgrp. Estas órdenes tienen sus equivalentes en modo gráfico haciendo clic en el botón Gestionar grupos.


7.2. Asignar permisos a ficheros y carpetas.

El sistema de permisos de Linux se basa en que cada fichero y directorio tiene un propietario, es decir pertenece a alguien. Realmente existen tres categorías de usuarios o roles relativos a cualquier fichero o directorio: El propietario, el grupo (al que pertenece el propietario) y los otros (el resto de usuarios del sistema).

Además sobre los ficheros y carpetas existen tres tipos de permisos:

Así pues, existen tres tipos de permisos sobre tres roles o categorías de usuarios, resultando por tanto, en un conjunto de nueve combinaciones: rwx sobre el propietario, rwx sobre el grupo y rwx sobre otros.

Existen dos modos de cambiar o visualizar los permisos. La más sencilla es utilizando Konqueror (KDE) o Nautilus (GNOME), haz clic con el botón derecho del ratón sobre el fichero o directorio y selecciona del menú contextual la opción Propiedades. Luego haz clic en la pestaña Permisos, observa el cuadro de dialogo que te aparece:

Puedes cambiar por ejemplo que el Grupo (los usuarios que pertenecen al mismo grupo del propietario) puedan leer y escribir sobre MiFichero.txt. Haz clic a la derecha de Grupo en Lectura posible y cámbialo por Lectura y escritura posibles.

Observa las opciones por defecto que asigna a un fichero. Haz clic en Permisos avanzados y verás el siguiente cuadro de diálogo.

En principio el propietario (también llamado usuario) puede leer y escribir (no puede ejecutar porque por defecto los archivos no son ejecutables), el grupo y el resto de usuarios sólo tienen permiso de lectura pero no pueden modificar el archivo.

Esto equivale a r w - (lectura y escritura propietario, el guión significa la ausencia de dicho permiso) r - - (grupo) r - - (otros). El cambio que propusimos antes se podría hacer también en esta ventana haciendo clic en la casilla de verificación intersección de Grupo y Escribir.

Observa como en Nautilus la interfaz es bastante parecida, sólo que dentro de las Propiedades encontramos más pestañas: Notas, Abrir con, Emblemas y Básico.

La segunda opción para modificar los permisos, es entrando en la consola y ejecutando chmod. Escribimos chmod, seguido de:

Un ejemplo sería chmod a+w MiFichero.txt, es decir, todos van a poder escribir sobre dicho fichero. Si queremos hacer lo mismo que antes hicimos con la interfaz gráfica, sustituimos la a por g (es decir sólo cambiamos los permisos para nuestro grupo, todos los miembros de nuestro grupo van a poder modificar MiFichero.txt). Para ver en modo consola los permisos utiliza la orden ls modificada por l (Long, formato largo): ls –l.


7.3. Entendiendo el sistema de ficheros de GNU/Linux.

El sistema de ficheros de Linux es básicamente un árbol donde el nodo raíz es el nodo / (no confundir con la barra invertida de Windows \). Observa la diferencia con Windows donde tenemos unidades (“C:” para el disco duro, “A:” para el disco flexible o disquette, “D:” para el CD-ROM o DVD, etc.) dentro de las cuales existe una estructura arbórea.


Linux es más simple y coherente, en él todo está en un único árbol. Si lo piensas un poco verás que es un enfoque mucho más sencillo y elegante. Un árbol significa que todo nodo (excepto el raíz) tiene un y solo un padre, pero puede no tener hijos o tener uno, dos, etc.

Ahora bien, ¿dónde se encuentran los discos duros, Cds, pendrives, etc.? En principio todos estos dispositivos se “montan” en el directorio /media.

Nuestro ordenador puede contener varios discos duros. Supongamos que tenemos discos duros IDE. En principio podemos tener cuatro discos duros IDE, Linux los denomina:

Para complicar un poco la cosa, un disco está siempre particionado en particiones primarias (con un máximo de cuatro) y extendidas. Una partición extendida contiene un número variable de unidades lógicas. Las particiones primarias se identifican con un número del 1 al 4 y las lógicas a partir del 5.

Supongamos que queremos tener un disco duro con cuatro particiones. Tendríamos en la primera partición primaria, Windows (se definirá dicha partición como hda1) y una extendida con tres unidades lógicas. Este enfoque es un modelo clásico y sencillo. Es decir, hemos creado una partición primaria y con el resto del disco duro, una partición extendida. Esta a su vez la hemos dividido en tres unidades lógicas.

La primera partición lógica (la que nos gusta llamar DATOS), es una partición donde se guardan todos los archivos que estamos utilizando y será accedida para lectura y escritura tanto por Windows como por Linux. Como es la primera partición lógica será la hda5. La hda6 típicamente contendrá la partición nativa de Linux y la hda7 la partición de swap o de intercambio.

Todo esto se puede aplicar en función del número de discos duros que tengamos. Si estamos hablando de un segundo disco duro en el primer IDE hablaremos de un disco hdb y la primera partición primaría sería la hdb1. Si tenemos discos duros SCSI o más recientemente los famosos SATA (Serial ATA) Linux los llamará sda, sdb,... en función del numero de discos que tengamos y las particiones seguirán la misma convención ya explicada.


Cada una de las particiones será accesible a través de un punto de montaje. El punto de montaje es el directorio donde ubicamos dicha partición en nuestro sistema de ficheros. Una herramienta muy útil para conocer tu particionado es GParted, se instala con el paquete gparted, se encuentra en Sistema, Administración, Editor de Particiones.

En el ejemplo inicial los discos estarán montados normalmente la siguiente estructura:

Y en el caso de discos SATA, como observarás no existen cambios significativos:

Los CDROM y DVD son accesibles desde /media/cdrom y las unidades pendrives desde /media/usbdisk o /media/disk. En principio, Linux lo montará automáticamente y sólo tendrás que preocuparte de saber donde está todo. Si tienes un pendrive y quieres llevártelo, tendrás que desmontarlo. ¡Ojo!, si no haces esto te arriesgar a perder los datos de tu Pendrive. Esto también se llama extracción segura.

Para lo cual te vas al icono en tu escritorio donde veas el pendrive, haces clic con el botón derecho (menú contextual) sobre el Pendrive y selecciona Extracción segura.

Un menú contextual es un menú que indica las acciones que son oportunas o pertinentes en un contexto dado. Así tiene sentido realizar una extracción segura sobre un pendrive pero no obviamente sobre una carpeta o fichero.

En la estructura de directorios hay un directorio especialmente relevante, el directorio home. Este es el directorio donde joe (el usuario con el que estamos trabajando) tendrá almacenado todas sus carpetas y ficheros. Si estás navegando por la consola y escribes cd sin más, irás a tu directorio home, que por defecto se encontrará en /home/joe. Todos los usuarios tienen un directorio home que parte de la misma raíz /home, excepto el Administrador. Este usuario tiene su directorio home colgando del directorio raíz y se llama /root.

Existen muchos directorios que son de primer nivel, es decir, tiene al raíz como padre. Por citar los más importantes son:


7.4. Matando procesos rebeldes.

Para saber como podemos matar a procesos “problemáticos”, precisamos entender el concepto de proceso.


Un proceso, es básicamente un programa en ejecución. Cuando ejecutamos una aplicación para realizar una tarea o lanzamos una orden desde consola, tenemos asociado uno o más procesos que son los encargados de realizar la tarea encomendada.

Podemos además ejecutar órdenes en segundo plano, por ejemplo: firefox &, lanza firefox y te devuelve el control, observa el “&” al final. Recuerda que Linux es multitarea, lo que significa que puede atender varias órdenes o procesos simultáneamente.

Respondamos entonces a la pregunta inicial. ¿Qué hago cuando una aplicación deja de responder? ¿Podemos realmente matar los procesos? Empezaremos respondiendo a la segunda pregunta, la respuesta es un rotundo Si.

En Linux los procesos y programas que dejan de funcionar podemos matarlos a diferencia de Windows XP, donde realmente sucede lo contrario. Para conseguir cerrar una aplicación que deja de responder, debemos enviarle una señal al proceso asociado que le ordene que se “suicide”.

Veamos los pasos a seguir. Lo primero es identificar al proceso o procesos que nos está/n planteando el problema. Así supongamos que es el juego gnometrix el que “peta” o deja de responder.

Abrimos una consola (si la interfaz gráfica deja de responder, abre una consola virtual con las teclas Ctrl, Alt y F1) y ejecutamos “ps -A | grep gnometrix”. Con la orden ps obtenemos un listado de todos los procesos en ejecución. Lo que más nos interesa de la información que nos devuelve es el PID (identificador único del proceso) y el CMD (el nombre del proceso).

Con la segunda parte de la instrucción grep gnometrix que recibe como entrada todas las líneas devueltas por ps -A, seleccionamos aquellas líneas que contienen la palabra gnometrix, es decir los procesos asociados con el programa que queremos cerrar. Por ejemplo la salida de dicha orden en consola es la siguiente:

8338 ? 00:00:00 gnometrix

8339 ? 00:00:00 gnometrix

Donde 8338 y 8339 son los PIDs o identificadores de los procesos conflictivos que han dejado de responder, asociados con el programa gnometrix.

En segundo lugar mandamos una señal a dichos procesos. Existen muchos tipos de señales, pero la que más nos interesa es la 9, la que les ordena que se mueran. La orden kill envía señales a los procesos. Luego lo que tenemos que escribir en consola es kill -9 8838 y kill -9 8839.

Existe una forma mucho más sencilla de realizar todo esto mediante la orden xkill. Teclea xkill en la consola y verás una calavera, bastará con desplazarse hacia la ventana que no responde y hacer clic sobre ella para que desaparezca.

Como última acción, si a pesar de matar los recursos conflictivos la interfaz gráfica no responde, desde la consola virtual escribe sudo reboot que es la orden para reiniciar el sistema. No apagues con el botón POWER, si haces esto a menudo dejarás el sistema inútil con sólo unos cuantos días de uso.


7.5. Creación de scripts.

Normalmente cuando utilizamos Linux lo hacemos de modo interactivo, es decir, lanzamos órdenes y Linux nos responde. Sin embargo, existen ocasiones donde conviene agrupar un conjunto de órdenes en un fichero para luego ejecutarlas conjuntamente, esto es un shell script o un script para abreviar. Para una información en profundidad consulta el excelente manual que encontrarás en la siguiente dirección: http://freeos.com/guides/lsst/index.html

Para crear tus propios scripts debes seguir los siguientes pasos:

  1. Editar un fichero sudo vi miScript con el siguiente contenido:

#!/bin/bash

clear

echo "Hola, $USER"

cal

echo "Si, hoy es ... ";date

fortune

exit 0

  1. Hazlo ejecutable: sudo chmod 755 miScript.

  1. Lánzalo: ./miScript.

Existen un conjunto de variables que son accesibles desde cualquier programa shell:

Ten en cuenta que nos referimos a las variables como $myVariable, sin embargo si queremos asignarle un valor quitamos el signo “$”, sería como por ejemplo: myVariable=5.

Veamos la forma más rápida que conocemos de realizar una consulta a la RAE (Real Academia Española). Vamos a crear un script rae, guárdalo en /usr/local/bin, donde se encuentran los archivos ejecutables y dadle permiso de ejecución. En otras palabras:

1º) Abre la consola.

2º) Teclea vi rae y escribe

#!/bin/bash

clear

lynx -dump http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$1

3º) sudo cp rae /usr/local/bin.

4º) sudo chmod a+x /usr/local/bin/rae.

Observa que $1 es el parámetro que se le va a pasar. Para utilizarlo escribe en la consola rae “palabra_a_buscar”, es decir $1 sería palabra_a_buscar. Para buscar en la wikipedia basta escribir en otro fichero: lynx -dump http://es.wikipedia.org/wiki/$1 | less (la única diferencia es que la salida la vamos a ir mostrando paginada), por supuesto debes ponerlo en el mismo lugar y darle permiso de ejecución.

Las estructuras de control utilizadas en los scripts son las siguientes:

Alternativa if. Si se cumple la condición se ejecuta sentencia.

También se pueden anidar.

if [ condición ] if [condicion]

then then

sentencia sentenciaSisecumpleCondición

fi else

sentenciaSiNOsecumpleCondición

fi

Este sería un ejemplo de utilización de if.

#!/bin/sh

if [ $USER != "root" ]

then

echo "Bacalao, tú no eres root"

else

echo “Bienvenido root”

fi

Alternativa múltiple, case. Si la variable es igual a Valor1, ejecuta la Sentencia1, si es igual a Valor2, Sentencia2.

En caso de que el valor de variable no coincida con ninguno de los valores listados ejecuta SentenciaN.

case $ variable

Valor1)

Sentencia1

;;

Valor2)

Sentencia2

;;

[...]

*)

SentenciaN

;;

esac

Bucles: while. Se ejecuta sentencia mientras se cumpla condición.

while [condicion]

do

Sentencia

done

Bucles: until. Se ejecuta sentencia hasta que se cumpla condición.

until [condición]

do

Sentencia

done

Bucles: for. Se ejecuta el bucle tantas veces como elementos tiene la lista, nombreVariable va tomando los distintos valores de la lista.


La última expresión es idéntica a la utilizada en C. Ejecuta sentencia mientras se cumpla Condición.

for nombreVariable in {valor1, valor2, ..., valorN}

do

Sentencia

done

for ((expresionInicial;Condición;expresiónIncremento=

do

Sentencia

done

En expresiónInicial se inicializa el bucle, normalmente se asigna un valor a una variable, en la tercera expresión del bucle se actualiza dicha variable para no entrar en un bucle sin fin.


Aquí te presentamos un programa clásico que solicita órdenes por consola y ejecuta las distintas acciones hasta que el usuario teclea el número 4. Puedes sustituir el until por un while [ $FIN=no], se ejecutaría mientras $FIN fuera no.

#!/bin/bash

FIN=no

until [ $FIN = si ]

do

echo Ejecuta tu orden, 1 es la ayuda

read orden

case $orden in

1)

echo '1 ayuda 2 calendario 3 cita 4 salir'

;;

2) cal;

;;

3) fortune;

;;

4) FIN=si

;;

esac

done

exit 0

Para demostrarte la potencia de los scripts, observa este cuadro de diálogo creado en uno:

#!/bin/bash

dialog --title "Pantalla de bienvenida" --clear \

--yesno "Hola, $USER" 10 30

Tienes que instalar el paquete dialog.

7.6. Optimización del sistema.

Aunque a primera vista pueda parecer que todos coincidimos en lo que entendemos por optimizar el sistema, te mostraremos en seguida que realmente no es así.

En principio, todos esperamos de nuestro sistema que sea rápido y eficiente. Sin embargo, el compromiso entre lo que estemos dispuestos a sacrificar, por ejemplo, en términos de experiencias de escritorio, interfaces 3D, amigabilidad del software, etc. y lo que realmente esperamos de nuestro sistema en cuanto a rendimiento, puede diferir tanto que seguramente sería complicado ponernos de acuerdo.

Te vamos a dar unas pautas para conseguir que tu sistema Ubuntu vuele; el que elijas una u otra opción dependerá de tus expectativas así como de las posibilidades de tu equipo.


Es útil instalar el paquete dnsmasq para que tu sistema recuerde las direcciones IP de los dominios que visitas con más frecuencia. Dnsmasq está diseñado para proveer servicios de DNS y DHCP a una red pequeña, aquí lo utilizamos como una caché de direcciones de Internet.

Una vez que lo instales precisas realizar estos sencillos pasos:

  1. Abre la consola y escribe sudo vi /etc/dnsmasq.conf sustituye la cadena #listen-address= por listen-address=127.0.0.1 o la interfaz por la que quieres que escuche las peticiones, podrías también querer que fuera eth0 o eth1 para atender la red local. Si quisieras que fuera también un servidor DHCP bastaría con modificar la línea: dhcp-range=192.168.0.50,192.168.0.150,12h. En este ejemplo asignaría las IP de la 50 a la 150, siendo la dirección IP de nuestra red local 192.168.0.0. El último parámetro es el tiempo de la liberación de una IP.

  2. Ahora teclea sudo vi /etc/dhcp3/dhclient.conf, la línea

#prepend domain-name-servers 127.0.0.1; debe estar descomentada, es decir, sin la almohadilla inicial (#).

  1. Teclea sudo vi /etc/resolv.conf y escribe en la primera línea nameserver 127.0.0.1. En otras palabras le indicamos que el primer lugar donde debe buscar poder realizar la traducción (de nombres a direcciones IP) es en la propia máquina local.

  2. Reiniciar el demonio dnsmasq: sudo /etc/init.d/dnsmasq restart. Observa en la figura que con dig observamos el tiempo que tarda en respondernos el servidor, la primera vez 61 milisegundos, la segunda tan sólo 3. Podríamos prescindir de mucha basura en la salida, escribiendo: dig google.es | grep Query. Otra solución similar es OpenDNS, visita http://www.opendns.com/ , para más información.


127.0.0.1 localhost joe-desktop

127.0.1.1 joe-desktop

# The following lines are desirable for IPv6 capable hosts

#::1 ip6-localhost ip6-loopback

#fe00::0 ip6-localnet

#ff00::0 ip6-mcastprefix

#ff02::1 ip6-allnodes

#ff02::2 ip6-allrouters

#ff02::3 ip6-allhosts

Elimina los servicios que no precises en Sistema, Administración, Servicios. Primero tendrás que Desbloquear la herramienta.

Por ejemplo, si utilizas WebMail (Yahoo, Gmail, Hotmail, etc.) no precisarás el Agente de correo (postfix o exim4), análogamente si no utilizas Bluetooth deshabilita el servicio de Gestión de dispositivos Bluetooth, etc.